package com.ygctpap.test;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class mqc1 {


    public static void main(String[] args) throws IOException, TimeoutException {
        //为当前消费者取名称
        String name = "consumer-news";

        // 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置RabbitMQ地址
        factory.setHost("localhost");
        //创建一个新的连接
        Connection connection = factory.newConnection();
        //创建一个通道
        Channel channel = connection.createChannel();
        //交换机声明（参数为：交换机名称；交换机类型）

        channel.exchangeDeclare("tr","topic");
        //获取一个临时队列
        //String queueName = channel.queueDeclare().getQueue();

        //队列声明:队列名，队列是否持久化，是否独占队列，消费完后是否删除队列，额外参数
        //Map map = new HashMap();
        //String queueName = channel.queueDeclare("zxc",true, false,false,null).getQueue();

        //System.out.println("队列名是："+ queueName);
       ;
        channel.queueDeclare("us",true, false,false,null);


        channel.queueBind("us", "tr", "tr1");

        System.out.println(name +" 等待接受消息");
        //DefaultConsumer类实现了Consumer接口，通过传入一个频道，
        // 告诉服务器我们需要那个频道的消息，如果频道中有消息，就会执行回调函数handleDelivery
        Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                                       AMQP.BasicProperties properties, byte[] body)
                    throws IOException {


                //System.out.println(consumerTag +"," + envelope.toString()+","+properties.toString());

                String message = new String(body, "UTF-8");
                System.out.println(" 接收到消息 '" + message + "'");
            }
        };
        //自动回复队列应答 -- RabbitMQ中的消息确认机制
        channel.basicConsume("us", true, consumer);
    }


}
